package org.example.lys.utils;


import java.math.BigDecimal;
import java.text.DecimalFormat;

/**
 * Created by xuchonggao on 2016/9/22.
 */
public class PriceUtils {

    public static final BigDecimal b100 = new BigDecimal("100");
    public static final BigDecimal B_MINUS_1 = new BigDecimal("-1");
    /**
     * 二位小数点格式刷
     */
    public static final DecimalFormat FORMATTER01 = new DecimalFormat("0.00");


    /**
     * 将分转成元 两位小数 进一位
     *
     * @param para
     * @return
     */
    public static BigDecimal point2Yuan(BigDecimal para) {
        if (para == null) {
            return null;
        }
        return para.divide(b100, 2, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * 将分转成元 两位小数 原样输出
     *
     * @param para
     * @return
     */
    public static BigDecimal point0Yuan(BigDecimal para) {
        if (para == null) {
            return null;
        }
        return para.divide(b100);
    }

    /**
     * 将元转分
     *
     * @param para
     * @return
     */
    public static BigDecimal yuan2Point(BigDecimal para) {
        if (para == null) {
            return null;
        }
        return para.multiply(b100);
    }

    /**
     * 计算单价
     *
     * @param totalPrice
     * @param quantity
     * @return
     */
    public static BigDecimal singlePriceFloor(BigDecimal totalPrice,
                                              Integer quantity) {
        if (totalPrice == null) {
            return null;
        }
        if (0 == totalPrice.intValue()) {
            return new BigDecimal(0);
        }
        return totalPrice.divide(new BigDecimal(quantity), 2, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * 计算单价
     *
     * @param totalPrice
     * @param quantity
     * @return
     */
    public static BigDecimal singlePriceCeiling(BigDecimal totalPrice,
                                                Integer quantity) {
        if (totalPrice == null) {
            return null;
        }
        if (0 == totalPrice.intValue()) {
            return new BigDecimal(0);
        }
        return totalPrice.divide(new BigDecimal(quantity), 2, BigDecimal.ROUND_HALF_UP);
    }


    /**
     * 流水回扣 单位是分
     *
     * @param amount
     * @param rate
     * @return 最终得钱
     */
    public static BigDecimal calcuRebate(BigDecimal amount, BigDecimal rate) {
        BigDecimal bigDecimal = amount.multiply(rate).setScale(0, BigDecimal.ROUND_HALF_UP);
        return amount.subtract(bigDecimal).setScale(0, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * 计算天价 单位是分
     *
     * @param amount
     * @param days
     * @return
     */
    public static BigDecimal calcuDayPrice(BigDecimal amount, BigDecimal days) {
        return amount.divide(days, 0, BigDecimal.ROUND_HALF_UP);
    }

    /**
     * 计算天价 单位是分
     *
     * @param amount
     * @param days
     * @return
     */
    public static BigDecimal calcuRealPrice(BigDecimal amount, BigDecimal days, BigDecimal allDays) {
        return days.divide(allDays, 3, BigDecimal.ROUND_HALF_UP).multiply(amount).setScale(0, BigDecimal.ROUND_HALF_UP);

    }

    /**
     * 判断传输过来的金额是否只有二位小数点
     *
     * @param bigDecimal
     * @return
     */
    public static boolean isNumber(BigDecimal bigDecimal) {
        if (bigDecimal == null) {
            return false;
        }
        int i = 2;
        if (new BigDecimal(bigDecimal.intValue()).compareTo(bigDecimal) == 0) {
            return true;
        }
        if (bigDecimal.toString().split("\\.")[1].length() <= i) {
            return true;
        } else {
            return false;
        }
    }


    /**
     * 格式化金额: 保留2位小数
     *
     * @param originValue 源数字
     * @return 格式化后的字符串
     */
    public static String format01(BigDecimal originValue) {
        return FORMATTER01.format(originValue);
    }


}
